package utils

import (
	comm "com.wangzhumo.lottery/common"
	"com.wangzhumo.lottery/datasource"
	"fmt"
	"log"
	"math"
	"time"
)

const ipFrameSize = 2

func init(){
	// 移除ip count的纪录
	resetGroupIpList()
}


// 计划任务 - 每天0点清掉redis里的ip纪录
func resetGroupIpList(){
	log.Println("ip_day_lucky redis clear -- start")
	redisConn := datasource.InstanceRedis()
	for i := 0;i< ipFrameSize;i++ {
		// 将两个hash表都删除
		key := fmt.Sprintf("day_ip_%d",i)
		// 删除key
		redisConn.Do("DEL",key)
	}
	log.Println("ip_day_lucky redis clear -- end")

	// 启动下一个定时器，执行定时清除
	duration := comm.NextDayDuration()
	// 计划
	time.AfterFunc(duration,resetGroupIpList)
}


// IncrIpCount 自增ip并且返回ip参与的次数
func IncrIpCount(string string) int64 {
	// 将字符串的IP转化为数字
	ip4toInt := comm.Ip4toInt(string)
	// 分段ip存储
	i := ip4toInt % ipFrameSize
	key := fmt.Sprintf("day_ip_%d",i)
	redisConn := datasource.InstanceRedis()
	// key 是刚才分段的2个  value 是哈希表中的一个item
	// item 的key是 ip的int形式
	// item 的value 增加1的计数
	rs, err := redisConn.Do("HINCRBY",key,ip4toInt,1)
	if err != nil {
		log.Println("ip_day_lucky redis HINCRBY error ",err)
		return math.MaxInt32
	}else{
		return rs.(int64)
	}
}

